<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>GSoC2011SfM: D:/Travail/These/Determination caracteristiques camera/GSoC/SfM/src/MotionProcessor.cpp Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />

<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">GSoC2011SfM
   &#160;<span id="projectnumber">0.1</span>
   </div>
   <div id="projectbrief">Google Summer of Code 2011: Structure from motion</div>
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">D:/Travail/These/Determination caracteristiques camera/GSoC/SfM/src/MotionProcessor.cpp</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00002"></a>00002 <span class="preprocessor">#include &quot;macro.h&quot;</span> <span class="comment">//SFM_EXPORTS</span>
<a name="l00003"></a>00003 
<a name="l00004"></a>00004 <span class="preprocessor">#include &lt;opencv2/core/core.hpp&gt;</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;opencv2/imgproc/imgproc.hpp&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#ifdef HAVE_BOOST</span>
<a name="l00007"></a>00007 <span class="preprocessor"></span><span class="preprocessor">#include &lt;boost/filesystem.hpp&gt;</span>   <span class="comment">// includes all needed Boost.Filesystem declarations</span>
<a name="l00008"></a>00008 <span class="preprocessor">#endif</span>
<a name="l00009"></a>00009 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sstream&gt;</span>
<a name="l00010"></a>00010 
<a name="l00011"></a>00011 <span class="preprocessor">#include &quot;MotionProcessor.h&quot;</span>
<a name="l00012"></a>00012 
<a name="l00013"></a>00013 <span class="keyword">using</span> cv::Mat;
<a name="l00014"></a>00014 <span class="keyword">using</span> cv::Size;
<a name="l00015"></a>00015 <span class="keyword">using</span> cv::Vec;
<a name="l00016"></a>00016 <span class="keyword">using</span> cv::Ptr;
<a name="l00017"></a>00017 <span class="keyword">using</span> cv::VideoCapture;
<a name="l00018"></a>00018 <span class="keyword">using</span> std::string;
<a name="l00019"></a>00019 <span class="keyword">using</span> cv::imread;
<a name="l00020"></a>00020 <span class="keyword">using</span> std::ostringstream;
<a name="l00021"></a>00021 <span class="keyword">using</span> std::vector;
<a name="l00022"></a>00022 <span class="preprocessor">#ifdef HAVE_BOOST</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="keyword">using</span> boost::filesystem::path;
<a name="l00024"></a>00024 <span class="preprocessor">#endif</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a>00026 <span class="keyword">namespace </span>cv{
<a name="l00027"></a>00027   CVAPI( <span class="keywordtype">int</span> ) cvHaveImageReader( const <span class="keywordtype">char</span>* filename );
<a name="l00028"></a>00028 }
<a name="l00029"></a>00029 
<a name="l00030"></a>00030 namespace OpencvSfM{
<a name="l00031"></a>00031 
<a name="l00032"></a>00032   MotionProcessor::MotionProcessor( <span class="keywordtype">void</span> )
<a name="l00033"></a>00033   {
<a name="l00034"></a>00034     numFrame_=0;
<a name="l00035"></a>00035     pos_in_loading_process_ = 0;
<a name="l00036"></a>00036     wantedWidth_=-1;
<a name="l00037"></a>00037     wantedHeight_=-1;
<a name="l00038"></a>00038     convertToRGB_=-1;
<a name="l00039"></a>00039   }
<a name="l00040"></a>00040 
<a name="l00041"></a>00041   MotionProcessor::~MotionProcessor( <span class="keywordtype">void</span> )
<a name="l00042"></a>00042   {
<a name="l00043"></a>00043     <span class="keywordflow">switch</span>( type_of_input_ )
<a name="l00044"></a>00044     {
<a name="l00045"></a>00045     <span class="keywordflow">case</span> IS_WEBCAM:
<a name="l00046"></a>00046     <span class="keywordflow">case</span> IS_VIDEO:
<a name="l00047"></a>00047       capture_.release( );
<a name="l00048"></a>00048       <span class="keywordflow">break</span>;
<a name="l00049"></a>00049     <span class="keywordflow">case</span> IS_DIRECTORY:
<a name="l00050"></a>00050     <span class="keywordflow">case</span> IS_LIST_FILES:
<a name="l00051"></a>00051     <span class="keywordflow">case</span> IS_SINGLE_FILE:
<a name="l00052"></a>00052       nameOfFiles_.clear( );
<a name="l00053"></a>00053       <span class="keywordflow">break</span>;
<a name="l00054"></a>00054     }
<a name="l00055"></a>00055   }
<a name="l00056"></a>00056 
<a name="l00057"></a><a class="code" href="class_opencv_sf_m_1_1_motion_processor.html#a7a14674a19924a56943e9887f0895dee">00057</a>   <span class="keywordtype">bool</span> MotionProcessor::setInputSource( <span class="keywordtype">int</span> idWebCam )
<a name="l00058"></a>00058   {
<a name="l00059"></a>00059     <span class="keywordflow">if</span>( this-&gt;capture_.open( idWebCam ))
<a name="l00060"></a>00060     {
<a name="l00061"></a>00061       this-&gt;type_of_input_=IS_WEBCAM;
<a name="l00062"></a>00062       <span class="comment">//if we have some properties, set them to the webcam:</span>
<a name="l00063"></a>00063       this-&gt;capture_.set( CV_CAP_PROP_CONVERT_RGB,this-&gt;convertToRGB_&gt;0 );
<a name="l00064"></a>00064       <span class="keywordflow">if</span>( wantedHeight_&gt;0 )
<a name="l00065"></a>00065         this-&gt;capture_.set( CV_CAP_PROP_FRAME_HEIGHT,this-&gt;wantedHeight_ );
<a name="l00066"></a>00066       <span class="keywordflow">if</span>( wantedWidth_&gt;0 )
<a name="l00067"></a>00067         this-&gt;capture_.set( CV_CAP_PROP_FRAME_WIDTH,this-&gt;wantedWidth_ );
<a name="l00068"></a>00068       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00069"></a>00069     };
<a name="l00070"></a>00070     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00071"></a>00071   };
<a name="l00072"></a>00072 
<a name="l00073"></a><a class="code" href="class_opencv_sf_m_1_1_motion_processor.html#a297d734c62329988c34c06ef007c0532">00073</a>   <span class="keywordtype">bool</span> MotionProcessor::setInputSource( std::vector&lt; std::string &gt; list_images )
<a name="l00074"></a>00074   {
<a name="l00075"></a>00075     this-&gt;type_of_input_=IS_LIST_FILES;
<a name="l00076"></a>00076     nameOfFiles_ = list_images;
<a name="l00077"></a>00077     suffix_ = <span class="stringliteral">&quot;Not a dynamic list&quot;</span>;
<a name="l00078"></a>00078     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00079"></a>00079   };
<a name="l00080"></a>00080 
<a name="l00081"></a><a class="code" href="class_opencv_sf_m_1_1_motion_processor.html#ae590078740f3cbdd3f32f403f0044c2e">00081</a>   <span class="keywordtype">bool</span> MotionProcessor::setInputSource( std::string nameOfFile,
<a name="l00082"></a>00082     TypeOfMotionProcessor inputType<span class="comment">/*=IS_VIDEO*/</span> )
<a name="l00083"></a>00083   {<span class="comment">//IS_DIRECTORY, IS_VIDEO or IS_SINGLE_FILE</span>
<a name="l00084"></a>00084     this-&gt;sourceName_=nameOfFile;
<a name="l00085"></a>00085     this-&gt;type_of_input_=inputType;
<a name="l00086"></a>00086 
<a name="l00087"></a>00087     <span class="keywordflow">if</span>( inputType == IS_VIDEO )
<a name="l00088"></a>00088       <span class="keywordflow">return</span> this-&gt;capture_.open( nameOfFile );
<a name="l00089"></a>00089 
<a name="l00090"></a>00090     <span class="keywordflow">if</span>( inputType == IS_DIRECTORY )
<a name="l00091"></a>00091     {
<a name="l00092"></a>00092 <span class="preprocessor">#ifdef HAVE_BOOST</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span>      path dirTmp( nameOfFile.c_str( ) );
<a name="l00094"></a>00094       <span class="keywordflow">if</span> ( !boost::filesystem::exists( dirTmp ) || !boost::filesystem::is_directory( dirTmp ) ) {
<a name="l00095"></a>00095         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00096"></a>00096       }
<a name="l00097"></a>00097 
<a name="l00098"></a>00098       boost::filesystem::directory_iterator iter= boost::filesystem::directory_iterator( dirTmp );
<a name="l00099"></a>00099       <span class="keywordflow">while</span>( iter != boost::filesystem::directory_iterator( ) )
<a name="l00100"></a>00100       {
<a name="l00101"></a>00101         <span class="keywordtype">string</span> name_of_file = iter-&gt;path( ).string( );
<a name="l00102"></a>00102         <span class="keywordflow">if</span>( cv::cvHaveImageReader( (<span class="keyword">const</span> <span class="keywordtype">char</span>* )name_of_file.c_str( ) ) )
<a name="l00103"></a>00103           nameOfFiles_.push_back( name_of_file );
<a name="l00104"></a>00104         iter++;
<a name="l00105"></a>00105       }
<a name="l00106"></a>00106       <span class="comment">//if we don&#39;t have loaded files, return an error!</span>
<a name="l00107"></a>00107       <span class="keywordflow">if</span>( nameOfFiles_.empty( ) )
<a name="l00108"></a>00108         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00109"></a>00109 
<a name="l00110"></a>00110       <span class="comment">// sort, since directory iteration</span>
<a name="l00111"></a>00111       <span class="comment">// is not ordered on some file systems</span>
<a name="l00112"></a>00112       std::sort( nameOfFiles_.begin( ), nameOfFiles_.end( ) );
<a name="l00113"></a>00113 <span class="preprocessor">#else</span>
<a name="l00114"></a>00114 <span class="preprocessor"></span>      <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00115"></a>00115 <span class="preprocessor">#endif</span>
<a name="l00116"></a>00116 <span class="preprocessor"></span>    }
<a name="l00117"></a>00117     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00118"></a>00118   };
<a name="l00119"></a>00119 
<a name="l00120"></a><a class="code" href="class_opencv_sf_m_1_1_motion_processor.html#a3afbdfe67a99a1484e7c64d5f7a2c3b2">00120</a>   <span class="keywordtype">bool</span> MotionProcessor::setInputSource( std::string prefix, std::string suffix,
<a name="l00121"></a>00121     <span class="keywordtype">int</span> startNumber<span class="comment">/*=0*/</span> )
<a name="l00122"></a>00122   {
<a name="l00123"></a>00123     this-&gt;sourceName_ = prefix;
<a name="l00124"></a>00124     this-&gt;suffix_ = suffix;
<a name="l00125"></a>00125     pos_in_loading_process_ = startNumber;
<a name="l00126"></a>00126     this-&gt;type_of_input_ = IS_LIST_FILES;
<a name="l00127"></a>00127     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00128"></a>00128     <span class="comment">//always true because the error will occur when user will try to get the frame, not now...</span>
<a name="l00129"></a>00129   };
<a name="l00130"></a>00130 
<a name="l00131"></a><a class="code" href="class_opencv_sf_m_1_1_motion_processor.html#abc9166f0cc101aa7eeae14643f7e2674">00131</a>   cv::Mat MotionProcessor::getFrame( )
<a name="l00132"></a>00132   {
<a name="l00133"></a>00133     Mat imgTmp;
<a name="l00134"></a>00134 
<a name="l00135"></a>00135     <span class="comment">//Is the current cursor in the middle of the video?</span>
<a name="l00136"></a>00136     <span class="keywordflow">if</span>( type_of_input_==IS_LIST_FILES &amp;&amp; numFrame_&lt;nameOfFiles_.size( ) )
<a name="l00137"></a>00137     {
<a name="l00138"></a>00138       <span class="comment">//Someone as changed the position of cursor...</span>
<a name="l00139"></a>00139       <span class="comment">//Reload the wanted file:</span>
<a name="l00140"></a>00140       imgTmp=imread( nameOfFiles_[ numFrame_ ],convertToRGB_ );
<a name="l00141"></a>00141       this-&gt;numFrame_++;<span class="comment">//and move to the next frame</span>
<a name="l00142"></a>00142     }
<a name="l00143"></a>00143     <span class="keywordflow">else</span>
<a name="l00144"></a>00144     {
<a name="l00145"></a>00145       <span class="keywordflow">switch</span>( type_of_input_ )
<a name="l00146"></a>00146       {
<a name="l00147"></a>00147       <span class="keywordflow">case</span> IS_WEBCAM:
<a name="l00148"></a>00148       <span class="keywordflow">case</span> IS_VIDEO:
<a name="l00149"></a>00149         {
<a name="l00150"></a>00150           <span class="comment">//Get the current image from file:</span>
<a name="l00151"></a>00151           <span class="keywordtype">bool</span> aNewFrameIsAvailable=capture_.grab( );
<a name="l00152"></a>00152           <span class="keywordflow">if</span>( aNewFrameIsAvailable )
<a name="l00153"></a>00153           {
<a name="l00154"></a>00154             capture_.retrieve( imgTmp );
<a name="l00155"></a>00155           }
<a name="l00156"></a>00156         }
<a name="l00157"></a>00157         <span class="keywordflow">break</span>;
<a name="l00158"></a>00158       <span class="keywordflow">case</span> IS_LIST_FILES:
<a name="l00159"></a>00159         {
<a name="l00160"></a>00160           ostringstream oss;
<a name="l00161"></a>00161           oss&lt;&lt;this-&gt;sourceName_&lt;&lt;this-&gt;numFrame_&lt;&lt;this-&gt;suffix_;
<a name="l00162"></a>00162 
<a name="l00163"></a>00163           imgTmp=imread( oss.str( ).c_str( ),convertToRGB_ );
<a name="l00164"></a>00164           this-&gt;numFrame_++;
<a name="l00165"></a>00165 
<a name="l00166"></a>00166           <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stop=this-&gt;numFrame_+10;
<a name="l00167"></a>00167           <span class="keywordflow">while</span>( imgTmp.empty( )&amp;&amp;stop&gt;this-&gt;numFrame_ ){
<a name="l00168"></a>00168             oss.str( <span class="stringliteral">&quot;&quot;</span> );
<a name="l00169"></a>00169             oss&lt;&lt;this-&gt;sourceName_&lt;&lt;this-&gt;numFrame_&lt;&lt;this-&gt;suffix_;
<a name="l00170"></a>00170             imgTmp=imread( oss.str( ).c_str( ),convertToRGB_ );
<a name="l00171"></a>00171             this-&gt;numFrame_++;
<a name="l00172"></a>00172           }
<a name="l00173"></a>00173           <span class="keywordflow">if</span>( ! imgTmp.empty( ) )
<a name="l00174"></a>00174             nameOfFiles_.push_back( oss.str( ) );<span class="comment">//add the new file</span>
<a name="l00175"></a>00175         }
<a name="l00176"></a>00176         <span class="keywordflow">break</span>;
<a name="l00177"></a>00177       <span class="keywordflow">case</span> IS_DIRECTORY:
<a name="l00178"></a>00178         {
<a name="l00179"></a>00179           <span class="keywordflow">if</span>( numFrame_&lt;nameOfFiles_.size( ) )
<a name="l00180"></a>00180           {
<a name="l00181"></a>00181             imgTmp=imread( nameOfFiles_[ numFrame_ ],convertToRGB_ );
<a name="l00182"></a>00182             this-&gt;numFrame_++;<span class="comment">//and move to the next frame</span>
<a name="l00183"></a>00183           }
<a name="l00184"></a>00184         }
<a name="l00185"></a>00185         <span class="keywordflow">break</span>;
<a name="l00186"></a>00186       <span class="keywordflow">case</span> IS_SINGLE_FILE:
<a name="l00187"></a>00187         {
<a name="l00188"></a>00188           imgTmp=imread( this-&gt;sourceName_.c_str( ),convertToRGB_ );
<a name="l00189"></a>00189         }
<a name="l00190"></a>00190         <span class="keywordflow">break</span>;
<a name="l00191"></a>00191       }
<a name="l00192"></a>00192     }
<a name="l00193"></a>00193 
<a name="l00194"></a>00194     <span class="keywordflow">if</span>( !imgTmp.empty( ) )
<a name="l00195"></a>00195     {
<a name="l00196"></a>00196       <span class="comment">//now we ensure the file as the good properties:</span>
<a name="l00197"></a>00197       <span class="comment">//First the colors:</span>
<a name="l00198"></a>00198       <span class="keywordflow">if</span>( (( (convertToRGB_&gt;0) &amp;&amp; imgTmp.channels( )&lt;=1 ) ||
<a name="l00199"></a>00199         ( (convertToRGB_==0) &amp;&amp; imgTmp.channels( )!=1 )) )
<a name="l00200"></a>00200       {
<a name="l00201"></a>00201         Mat correctImg;
<a name="l00202"></a>00202         <span class="keywordflow">if</span>( convertToRGB_==0 )
<a name="l00203"></a>00203           cvtColor( imgTmp,correctImg,CV_RGB2GRAY );
<a name="l00204"></a>00204         <span class="keywordflow">else</span>
<a name="l00205"></a>00205           cvtColor( imgTmp,correctImg,CV_GRAY2RGB );
<a name="l00206"></a>00206         imgTmp=correctImg;
<a name="l00207"></a>00207       }
<a name="l00208"></a>00208       <span class="comment">//then the width and height:</span>
<a name="l00209"></a>00209       <span class="keywordflow">if</span>( (( wantedHeight_&gt;0 )&amp;&amp;( wantedHeight_!=imgTmp.rows ))||
<a name="l00210"></a>00210         ( (wantedWidth_&gt;0 )&amp;&amp;( wantedWidth_!=imgTmp.cols )) )
<a name="l00211"></a>00211       {
<a name="l00212"></a>00212         Mat correctImg;
<a name="l00213"></a>00213         <span class="keywordtype">int</span> widthTmp=wantedWidth_;
<a name="l00214"></a>00214         <span class="keywordflow">if</span>( wantedWidth_&lt;=0 )
<a name="l00215"></a>00215           widthTmp=imgTmp.cols;
<a name="l00216"></a>00216         <span class="keywordtype">int</span> heightTmp=wantedHeight_;
<a name="l00217"></a>00217         <span class="keywordflow">if</span>( wantedHeight_&lt;=0 )
<a name="l00218"></a>00218           heightTmp=imgTmp.cols;
<a name="l00219"></a>00219         cv::resize( imgTmp,correctImg,Size( widthTmp,heightTmp ));
<a name="l00220"></a>00220         imgTmp=correctImg;
<a name="l00221"></a>00221       }
<a name="l00222"></a>00222     }
<a name="l00223"></a>00223 
<a name="l00224"></a>00224     <span class="keywordflow">return</span> imgTmp;
<a name="l00225"></a>00225   }
<a name="l00226"></a>00226 
<a name="l00227"></a><a class="code" href="class_opencv_sf_m_1_1_motion_processor.html#a32865291f286da0855b6aee7f726fa77">00227</a>   <span class="keywordtype">bool</span> MotionProcessor::setProperty( <span class="keywordtype">int</span> _idProp,<span class="keywordtype">double</span> _value )
<a name="l00228"></a>00228   {
<a name="l00229"></a>00229     <span class="keywordtype">bool</span> videoCaptureLikeThisProperty=<span class="keyword">true</span>;
<a name="l00230"></a>00230     <span class="keywordflow">if</span>( type_of_input_==IS_WEBCAM||type_of_input_==IS_VIDEO )
<a name="l00231"></a>00231       videoCaptureLikeThisProperty = capture_.set( _idProp,_value );
<a name="l00232"></a>00232     <span class="keywordflow">if</span>( ! videoCaptureLikeThisProperty )
<a name="l00233"></a>00233       <span class="keywordflow">return</span> <span class="keyword">false</span>;<span class="comment">//as the VideoCapture object don&#39;t want this property, don&#39;t do anything else.</span>
<a name="l00234"></a>00234 
<a name="l00235"></a>00235     <span class="comment">//First store the property using attributs:</span>
<a name="l00236"></a>00236     <span class="keywordflow">switch</span> ( _idProp )
<a name="l00237"></a>00237     {
<a name="l00238"></a>00238     <span class="keywordflow">case</span> CV_CAP_PROP_CONVERT_RGB:<span class="comment">//Boolean flags indicating whether images should be converted to RGB</span>
<a name="l00239"></a>00239       convertToRGB_ = ( int )_value;
<a name="l00240"></a>00240       <span class="keywordflow">break</span>;
<a name="l00241"></a>00241     <span class="keywordflow">case</span> CV_CAP_PROP_FRAME_HEIGHT:<span class="comment">//Height of the frames in the video stream</span>
<a name="l00242"></a>00242       wantedHeight_= ( int )_value;
<a name="l00243"></a>00243       <span class="keywordflow">break</span>;
<a name="l00244"></a>00244     <span class="keywordflow">case</span> CV_CAP_PROP_FRAME_WIDTH:<span class="comment">//Width of the frames in the video stream</span>
<a name="l00245"></a>00245       wantedWidth_= ( int )_value;
<a name="l00246"></a>00246       <span class="keywordflow">break</span>;
<a name="l00247"></a>00247     <span class="keywordflow">case</span> CV_CAP_PROP_POS_FRAMES:<span class="comment">// 0-based index of the frame to be decoded/captured next</span>
<a name="l00248"></a>00248       {
<a name="l00249"></a>00249         <span class="keywordflow">if</span>( type_of_input_==IS_LIST_FILES||type_of_input_==IS_SINGLE_FILE )
<a name="l00250"></a>00250         {
<a name="l00251"></a>00251           <span class="keywordflow">if</span>( _value&gt;=0&amp;&amp;_value&lt;=nameOfFiles_.size( ) )
<a name="l00252"></a>00252             numFrame_=( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )_value;
<a name="l00253"></a>00253           <span class="keywordflow">else</span>
<a name="l00254"></a>00254             CV_Error( CV_StsBadArg, <span class="stringliteral">&quot;CV_CAP_PROP_POS_FRAMES: _value out of range!&quot;</span> );
<a name="l00255"></a>00255         }
<a name="l00256"></a>00256       };
<a name="l00257"></a>00257       <span class="keywordflow">break</span>;
<a name="l00258"></a>00258     <span class="keywordflow">case</span> CV_CAP_PROP_FORMAT:<span class="comment">//The format of the Mat objects returned by retrieve( )</span>
<a name="l00259"></a>00259     <span class="keywordflow">case</span> CV_CAP_PROP_POS_MSEC:<span class="comment">//Film current position in milliseconds or video capture timestamp</span>
<a name="l00260"></a>00260     <span class="keywordflow">case</span> CV_CAP_PROP_FPS:<span class="comment">//Frame rate</span>
<a name="l00261"></a>00261     <span class="keywordflow">case</span> CV_CAP_PROP_FOURCC:<span class="comment">//4-character code of codec</span>
<a name="l00262"></a>00262     <span class="keywordflow">case</span> CV_CAP_PROP_MODE:<span class="comment">// A backend-specific value indicating the current capture mode</span>
<a name="l00263"></a>00263     <span class="keywordflow">case</span> CV_CAP_PROP_BRIGHTNESS:<span class="comment">// Brightness of the image ( only for cameras )</span>
<a name="l00264"></a>00264     <span class="keywordflow">case</span> CV_CAP_PROP_CONTRAST:<span class="comment">// Contrast of the image ( only for cameras )</span>
<a name="l00265"></a>00265     <span class="keywordflow">case</span> CV_CAP_PROP_SATURATION:<span class="comment">// Saturation of the image ( only for cameras )</span>
<a name="l00266"></a>00266     <span class="keywordflow">case</span> CV_CAP_PROP_HUE:<span class="comment">// Hue of the image ( only for cameras )</span>
<a name="l00267"></a>00267     <span class="keywordflow">case</span> CV_CAP_PROP_GAIN:<span class="comment">// Gain of the image ( only for cameras )</span>
<a name="l00268"></a>00268     <span class="keywordflow">case</span> CV_CAP_PROP_EXPOSURE:<span class="comment">// Exposure ( only for cameras )</span>
<a name="l00269"></a>00269     <span class="keywordflow">case</span> CV_CAP_PROP_FRAME_COUNT:<span class="comment">//Number of frames in the video file</span>
<a name="l00270"></a>00270       <span class="comment">//case CV_CAP_PROP_WHITE_BALANCE://Currently unsupported</span>
<a name="l00271"></a>00271     <span class="keywordflow">case</span> CV_CAP_PROP_RECTIFICATION:<span class="comment">//TOWRITE ( note: only supported by DC1394 v 2.x backend currently )</span>
<a name="l00272"></a>00272       {
<a name="l00273"></a>00273         <span class="keywordflow">if</span>( type_of_input_==IS_LIST_FILES||type_of_input_==IS_SINGLE_FILE||type_of_input_==IS_DIRECTORY )
<a name="l00274"></a>00274           <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00275"></a>00275         <span class="comment">//else, do nothing as the property is already assigned</span>
<a name="l00276"></a>00276       }
<a name="l00277"></a>00277       <span class="keywordflow">break</span>;
<a name="l00278"></a>00278     <span class="keywordflow">case</span> CV_CAP_PROP_POS_AVI_RATIO:
<a name="l00279"></a>00279       <span class="comment">//Relative position of the video file ( 0 - start of the film, 1 - end of the film )</span>
<a name="l00280"></a>00280       {
<a name="l00281"></a>00281         <span class="keywordflow">if</span>( (type_of_input_==IS_LIST_FILES &amp;&amp; suffix_ != <span class="stringliteral">&quot;Not a dynamic list&quot;</span> )||
<a name="l00282"></a>00282           type_of_input_== IS_SINGLE_FILE )
<a name="l00283"></a>00283           <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00284"></a>00284         <span class="keywordflow">else</span>
<a name="l00285"></a>00285         {
<a name="l00286"></a>00286           <span class="keywordflow">if</span>( type_of_input_==IS_DIRECTORY )
<a name="l00287"></a>00287           {
<a name="l00288"></a>00288             numFrame_=( <span class="keywordtype">unsigned</span> int ) ( _value*nameOfFiles_.size( ) );
<a name="l00289"></a>00289           }
<a name="l00290"></a>00290         }
<a name="l00291"></a>00291       }
<a name="l00292"></a>00292       <span class="keywordflow">break</span>;
<a name="l00293"></a>00293     <span class="keywordflow">default</span>:
<a name="l00294"></a>00294       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00295"></a>00295       <span class="keywordflow">break</span>;
<a name="l00296"></a>00296     }
<a name="l00297"></a>00297 
<a name="l00298"></a>00298     <span class="comment">//if the motion stream come from capture_, update the structure too:</span>
<a name="l00299"></a>00299     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00300"></a>00300   };
<a name="l00301"></a>00301 
<a name="l00302"></a><a class="code" href="class_opencv_sf_m_1_1_motion_processor.html#a6528cf81ad216d235aa6e2b504384ce6">00302</a>   <span class="keywordtype">double</span> MotionProcessor::getProperty( <span class="keywordtype">int</span> idProp )
<a name="l00303"></a>00303   {
<a name="l00304"></a>00304     <span class="keywordtype">double</span> valOut=0;
<a name="l00305"></a>00305     <span class="keywordflow">switch</span>( type_of_input_ )
<a name="l00306"></a>00306     {
<a name="l00307"></a>00307     <span class="keywordflow">case</span> IS_WEBCAM:
<a name="l00308"></a>00308     <span class="keywordflow">case</span> IS_VIDEO:
<a name="l00309"></a>00309       valOut = capture_.get( idProp );
<a name="l00310"></a>00310       <span class="keywordflow">break</span>;
<a name="l00311"></a>00311     <span class="keywordflow">case</span> IS_LIST_FILES:
<a name="l00312"></a>00312     <span class="keywordflow">case</span> IS_SINGLE_FILE:
<a name="l00313"></a>00313       {
<a name="l00314"></a>00314         <span class="keywordflow">switch</span> ( idProp )
<a name="l00315"></a>00315         {
<a name="l00316"></a>00316         <span class="keywordflow">case</span> CV_CAP_PROP_CONVERT_RGB:<span class="comment">//Boolean flags indicating whether images should be converted to RGB</span>
<a name="l00317"></a>00317           {
<a name="l00318"></a>00318             valOut=convertToRGB_;
<a name="l00319"></a>00319           };
<a name="l00320"></a>00320           <span class="keywordflow">break</span>;
<a name="l00321"></a>00321         <span class="keywordflow">case</span> CV_CAP_PROP_FRAME_HEIGHT:<span class="comment">//Height of the frames in the video stream</span>
<a name="l00322"></a>00322           {
<a name="l00323"></a>00323             valOut=wantedHeight_;
<a name="l00324"></a>00324           };
<a name="l00325"></a>00325           <span class="keywordflow">break</span>;
<a name="l00326"></a>00326         <span class="keywordflow">case</span> CV_CAP_PROP_FRAME_WIDTH:<span class="comment">//Width of the frames in the video stream</span>
<a name="l00327"></a>00327           {
<a name="l00328"></a>00328             valOut=wantedWidth_;
<a name="l00329"></a>00329           };
<a name="l00330"></a>00330           <span class="keywordflow">break</span>;
<a name="l00331"></a>00331         <span class="keywordflow">case</span> CV_CAP_PROP_POS_FRAMES:<span class="comment">// 0-based index of the frame to be decoded/captured next</span>
<a name="l00332"></a>00332           {
<a name="l00333"></a>00333             valOut=numFrame_;
<a name="l00334"></a>00334           };
<a name="l00335"></a>00335           <span class="keywordflow">break</span>;
<a name="l00336"></a>00336         <span class="keywordflow">case</span> CV_CAP_PROP_POS_AVI_RATIO:<span class="comment">//Relative position of the video file ( 0 - start of the film, 1 - end of the film )</span>
<a name="l00337"></a>00337           {
<a name="l00338"></a>00338             <span class="keywordflow">if</span>( type_of_input_==IS_LIST_FILES||type_of_input_==IS_SINGLE_FILE )
<a name="l00339"></a>00339               CV_Error( CV_StsBadArg, <span class="stringliteral">&quot;MotionProcessor unknow property !&quot;</span> );
<a name="l00340"></a>00340             <span class="keywordflow">else</span>
<a name="l00341"></a>00341             {
<a name="l00342"></a>00342               <span class="keywordflow">if</span>( type_of_input_==IS_DIRECTORY )
<a name="l00343"></a>00343               {
<a name="l00344"></a>00344                 valOut=( (double )numFrame_/nameOfFiles_.size( ) );
<a name="l00345"></a>00345               }
<a name="l00346"></a>00346             }
<a name="l00347"></a>00347           }
<a name="l00348"></a>00348           <span class="keywordflow">break</span>;
<a name="l00349"></a>00349         <span class="keywordflow">case</span> CV_CAP_PROP_FRAME_COUNT:<span class="comment">//Number of frames in the video file</span>
<a name="l00350"></a>00350           {
<a name="l00351"></a>00351             <span class="keywordflow">if</span>( type_of_input_==IS_LIST_FILES||type_of_input_==IS_SINGLE_FILE )
<a name="l00352"></a>00352               CV_Error( CV_StsBadArg, <span class="stringliteral">&quot;MotionProcessor unknow property !&quot;</span> );
<a name="l00353"></a>00353             <span class="keywordflow">else</span>
<a name="l00354"></a>00354             {
<a name="l00355"></a>00355               <span class="keywordflow">if</span>( type_of_input_==IS_DIRECTORY )
<a name="l00356"></a>00356               {
<a name="l00357"></a>00357                 numFrame_=( <span class="keywordtype">unsigned</span> int )idProp;
<a name="l00358"></a>00358               }
<a name="l00359"></a>00359             }
<a name="l00360"></a>00360           }
<a name="l00361"></a>00361           <span class="keywordflow">break</span>;
<a name="l00362"></a>00362         <span class="keywordflow">case</span> CV_CAP_PROP_FORMAT:<span class="comment">//The format of the Mat objects returned by retrieve( )</span>
<a name="l00363"></a>00363         <span class="keywordflow">case</span> CV_CAP_PROP_POS_MSEC:<span class="comment">//Film current position in milliseconds or video capture timestamp</span>
<a name="l00364"></a>00364         <span class="keywordflow">case</span> CV_CAP_PROP_FPS:<span class="comment">//Frame rate</span>
<a name="l00365"></a>00365         <span class="keywordflow">case</span> CV_CAP_PROP_FOURCC:<span class="comment">//4-character code of codec</span>
<a name="l00366"></a>00366         <span class="keywordflow">case</span> CV_CAP_PROP_MODE:<span class="comment">// A backend-specific value indicating the current capture mode</span>
<a name="l00367"></a>00367         <span class="keywordflow">case</span> CV_CAP_PROP_BRIGHTNESS:<span class="comment">// Brightness of the image ( only for cameras )</span>
<a name="l00368"></a>00368         <span class="keywordflow">case</span> CV_CAP_PROP_CONTRAST:<span class="comment">// Contrast of the image ( only for cameras )</span>
<a name="l00369"></a>00369         <span class="keywordflow">case</span> CV_CAP_PROP_SATURATION:<span class="comment">// Saturation of the image ( only for cameras )</span>
<a name="l00370"></a>00370         <span class="keywordflow">case</span> CV_CAP_PROP_HUE:<span class="comment">// Hue of the image ( only for cameras )</span>
<a name="l00371"></a>00371         <span class="keywordflow">case</span> CV_CAP_PROP_GAIN:<span class="comment">// Gain of the image ( only for cameras )</span>
<a name="l00372"></a>00372         <span class="keywordflow">case</span> CV_CAP_PROP_EXPOSURE:<span class="comment">// Exposure ( only for cameras )</span>
<a name="l00373"></a>00373           <span class="comment">//case CV_CAP_PROP_WHITE_BALANCE://Currently unsupported</span>
<a name="l00374"></a>00374         <span class="keywordflow">case</span> CV_CAP_PROP_RECTIFICATION:<span class="comment">//TOWRITE ( note: only supported by DC1394 v 2.x backend currently )</span>
<a name="l00375"></a>00375         <span class="keywordflow">default</span>:
<a name="l00376"></a>00376           CV_Error( CV_StsBadArg, <span class="stringliteral">&quot;MotionProcessor unknow property !&quot;</span> );
<a name="l00377"></a>00377           <span class="keywordflow">break</span>;
<a name="l00378"></a>00378         }
<a name="l00379"></a>00379       }
<a name="l00380"></a>00380       <span class="keywordflow">break</span>;
<a name="l00381"></a>00381     }
<a name="l00382"></a>00382 
<a name="l00383"></a>00383     <span class="keywordflow">return</span> valOut;
<a name="l00384"></a>00384   }
<a name="l00385"></a>00385 
<a name="l00386"></a>00386 }
</pre></div></div>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>



<hr class="footer"/><address class="footer"><small>
Generated on Sun Aug 21 2011 16:45:52 for GSoC2011SfM by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.5.1
</small></address>

</body>
</html>
